﻿using UnityEngine;

// 主窗口
public class MainWindow: MonoBehaviour, InputBox.Callback {
    private Game mGame;                 // 游戏
    private Menu mMenuGame;             // 游戏菜单
    private AudioSource mMusicPlayer;   // 音乐播放者
    private StatusBar mStatusBar;       // 状态栏

    /**
     * 游戏结束事件的响应方法。
     * @param allOver   全部通关则为 true，否则为 false
     */
    private void OnGameOver(bool allOver) {
        if (allOver) {
            MessageBox.Show(LanguageManager.Get("IDS_WON_ALL_OVER"));
        } else {
            MessageBox.Show(LanguageManager.Get("IDS_WON"), () => mGame.GotoNextLevel());
        }
    }

    /**
     * 进入关卡事件的响应方法。
     * @param level    关卡数
     */
    public void OnGotoLevel(int level) {
        // 设置状态栏文字
        string title = string.Format(LanguageManager.Get("IDS_LEVEL"), level);
        mStatusBar.SetLabelTitle(0, title);
        title = string.Format(LanguageManager.Get("IDS_MOVE_COUNT"), 0);
        mStatusBar.SetLabelTitle(1, title);
    }

    /**
     * 输入窗口的"确定"的单击响应方法。
     * @param intValue  用户输入的数值
     */
    public void OnInputBoxOK(int intValue) {
        // 进入关卡
        if (intValue != mGame.Level) {
            mGame.GotoLevel(intValue);
        }
    }

    public void OnInputBoxOK(string stringValue) {
    }

    public void OnInputBoxCancel() {
    }

    /**
     * 小人移动事件的响应方法。
     * @param moveCount    小人移动次数
     */
    public void OnManMoved(int moveCount) {
        string title = string.Format(LanguageManager.Get("IDS_MOVE_COUNT"), moveCount);
        mStatusBar.SetLabelTitle(1, title);
    }

    /**
     * "重玩本关"菜单项的单击响应方法。
     */
    private void OnMenuItemRestartClicked() {
        mGame.Restart();
    }

    /**
     * "选关"菜单项的单击响应方法。
     */
    private void OnMenuItemSelectLevelClicked() {
        // 显示输入窗口
        string tipText = string.Format(LanguageManager.Get("IDS_PLEASE_INPUT_NUMBER"), Const.LEVEL_COUNT);
        InputBox.Show(this, tipText, mGame.Level, Const.LEVEL_COUNT, 1);
    }

    /**
     * "回退"菜单项的单击响应方法。
     */
    private void OnMenuItemUndoClicked() {
        mGame.Undo();
    }

    /**
     * 开始。
     */
    private void Start() {
        // 初始化成员
        mGame = gameObject.GetComponent<Game>();
        mMusicPlayer = gameObject.GetComponent<AudioSource>();

        // 订阅事件
        mGame.mGameOverEvent.AddListener(OnGameOver);
        mGame.mGotoLevelEvent.AddListener(OnGotoLevel);
        mGame.mManMovedEvent.AddListener(OnManMoved);

        // 创建菜单
        MenuBar menuBar = transform.GetComponentInChildren<MenuBar>();
        mMenuGame = menuBar.Add(LanguageManager.Get("IDS_GAME"));
        mMenuGame.Add(LanguageManager.Get("IDS_START"), OnMenuItemRestartClicked);
        mMenuGame.Add(LanguageManager.Get("IDS_SELECT_LEVEL"), OnMenuItemSelectLevelClicked);
        mMenuGame.Add(LanguageManager.Get("IDS_UNDO"), OnMenuItemUndoClicked);

        // 创建状态栏
        mStatusBar = transform.GetComponentInChildren<StatusBar>();
        string title = string.Format(LanguageManager.Get("IDS_LEVEL"), 1);
        mStatusBar.AddLabel(title);
        title = string.Format(LanguageManager.Get("IDS_MOVE_COUNT"), 0);
        mStatusBar.AddLabel(title);
    }
}
